package co.edu.udea.herbario.dao;

import java.util.List;

import co.edu.udea.herbario.dto.Especie;
import co.edu.udea.herbario.excepcion.Excepcion;

/**
 * Clase de tipo interface que contiene la declaracion de los metodos utilizados para gestionar
 * los datos de la tabla Especie entre la persistencia y la logica de la aplicacion
 * 
 * @author Lorena Orozco, Alejandro Areiza, Marcela Colorado
 *
 */

public interface EspecieDao 
{	
	/**
	 * Metodo que obtiene desde la tabla Especie el elemento referenciado con el codigo indicado
	 * como parametro
	 * 
	 * @param cod es el consecutivo que identifica la especie dentro del sistema
	 * 
	 * @return retorna un objeto de tipo Especie
	 * 
	 * @throws Excepcion
	 */
	public Especie obtener(int cod) throws Excepcion;
	
	/**
	 * Metodo para crear un elemento dentro de la tabla Especie
	 * 
	 * @param esp es un objeto de tipo Especie que contiene los datos del elemento que se desea 
	 * ingresar en la tabla Especie
	 * 
	 * @return retorna un entero: res = 1 si se realizo correctamente la creacion, de lo contrario 
	 * res = -1
	 * 
	 * @throws Excepcion
	 */
	public int crear(Especie esp) throws Excepcion;
	
	/**
	 * Modifica el estado (activo o inactivo) del elemento de la tabla Especie que coincida con los datos
	 * que contiene el objeto pasado como parametro
	 * 
	 * @param esp es un objeto de tipo Especie
	 * 
	 * @return retorna un entero: res = 1 si se realizo correctamente la actualizacion, de lo 
	 * contrario res = -1
	 *
	 * @throws Excepcion
	 */
	public int eliminar(Especie esp) throws Excepcion;
	
	/**
	 * Metodo para obtener de la tabla Especie el registro que corresponde al nombre de la especie,
	 * el cual es entregado como parametro
	 * 
	 * @param nom es el nombre de la especie
	 * 
	 * @return retorna un objeto de tipo Especie
	 * 
	 * @throws Excepcion
	 */
	public Especie obtenerEspeciePorNombre(String nom) throws Excepcion;
}
